class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm
    this.key = key
    this.cb = cb

    // 把当前的watcher对象记录到Dep类的静态属性target中
    Dep.target = this

    // 触发get方法，在get方法中会调用dep.addSub
    this.oldValue = vm[key]

    Dep.target = null // 防止将来重复添加
  }

  // 数据变化时发送通知，触发update方法更新视图
  update() {
    let newValue = this.vm[this.key]
    if(newValue === this.oldValue) return
    this.cb(newValue)
  }
}